/*
 * 控制流
 *
 *
 *
 */
fn flow(x: u32) {
    //除了没有括号，基本和C#一样
    if x > 10 {
        println!("x: {}", x);
    } else if x != 0 {
        println!("y: {}", x);
    }
    //let可以和条件配合使用，但是一定要有else保证包含所有情况
    let y = if x <= 1 {
        x * 10
    } else if x > 1 {
        x + 1
    } else {
        x
    };
    println!("{}", y);
}
/*
 * 循环
 * Rust 有三种循环：loop、while 和 for
 */
fn demo_loop(x: i32, y: i32) -> i32 {
    //有点像do while，但是loop是不做判断的，所以只能从内部break跳出;
    loop {
        let x = x + 1;
        if y < 10 {
            continue; //continue和break也和C#里一样
        }
        if x > 10 {
            break;
        }
    }
    let mut count = 0;
    let result = loop {
        count += 1;
        if count == 10 {
            break count * 2; //和C#里不同的是break是可以返回值的
        }
    };
    return result;
}
/*
 * while基本和c#里一样
 *
 */
fn demo_while() {
    let mut no = 3;
    while no > 0 {
        println!("{}", no);
        no = no - 1;
    }
}
/*
 * for基本是用来遍历的，他同时包含了c#里for和foreach的功能
 *
 *
 */
fn demo_for() {
    let arr: [i32; 10] = [5; 10];
    for t in arr.iter() {
        println!("{}", t);
    }
    //range 可以生成含左不含右的数组
    for i in 1..11 {
        println!("{}", i);
    }
}
/*
 * 测验一
 * 转换摄氏度与华氏度
 * 两个参数为温度，标识（F华氏度，C摄氏度）
 */
pub fn transformation(wendu: f32, leixing: char) -> f32 {
    let m: f32 = 32f32;
    if leixing == 'F' {
        (wendu - m) / 1.8
    } else {
        wendu * 1.8 + m
    }
}
/*
 * 测验二
 * 生成 n 阶斐波那契数列（即递归算法）
 */
pub fn fs(n: u32) -> u32 {
    if n <= 1 {
        1
    } else if n == 2 {
        1
    } else {
        fs(n - 2) + fs(n - 1)
    }
}

/*
 * 测验三
 * 打印圣诞颂歌 「The Twelve Days of Christmas」 的歌词，并利用歌曲中的重复部分（编写循环）
 */
pub fn christmas() {
    for m in 1..13 {
        //这个String是动态的，从功能上看更像c#里的StringBuild
        //而在代码里用""包括的字符串都是&'static str，即不可变静态字符串
        let mut sing = String::new();
        //用to_string()即可把str转换为String
        sing.push_str(&format!("在圣诞节的第{0}天，我的真爱送我：", m));
        for n in 1..(m + 1) {
            match n {
                1 => sing.push_str("一只站在梨树上的鹧鸪鸟。"),
                2 => sing.push_str("两只鸠、"),
                3 => sing.push_str("三只法国母鸡、"),
                4 => sing.push_str("四只鸣唱的鸟儿、"),
                5 => sing.push_str("五只金戒指、"),
                6 => sing.push_str("六只生蛋的鹅、"),
                7 => sing.push_str("七只游水的天鹅、"),
                8 => sing.push_str("八位挤奶的佣妇、"),
                9 => sing.push_str("九位跳舞的女士、"),
                10 => sing.push_str("十个跳跃的男人、"),
                11 => sing.push_str("十一个吹风笛的风笛手、"),
                12 => sing.push_str("十二个打鼓的鼓手、"),
                _ => sing.push_str(""),
            }
        }
        println!("{}", sing);
    }
}
